{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "authorship_tag": "ABX9TyP+VaMHYUjlaDCjq3v0uDzY",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/Huangjian2013/ai-demo/blob/main/rag/13-NodeParser.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 60,
      "metadata": {
        "id": "7GdT_ya_4HyU"
      },
      "outputs": [],
      "source": [
        "!pip install llama-index --quiet\n",
        "!pip install tree_sitter --quiet\n",
        "!pip install tree_sitter_languages --quiet\n",
        "!pip install tree_sitter_python --quiet"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from google.colab import userdata\n",
        "from llama_index.core import Settings\n",
        "from llama_index.core import SimpleDirectoryReader,VectorStoreIndex\n",
        "from llama_index.core.node_parser import SimpleFileNodeParser\n",
        "from llama_index.core.node_parser import HTMLNodeParser\n",
        "from llama_index.core.node_parser import JSONNodeParser\n",
        "from llama_index.core.node_parser.text.code import CodeSplitter\n",
        "from llama_index.core.node_parser import SentenceSplitter\n",
        "from llama_index.core.node_parser import SentenceWindowNodeParser\n",
        "from tree_sitter_languages import get_language, get_parser\n",
        "from pathlib import Path\n",
        "from llama_index.readers.file import FlatReader"
      ],
      "metadata": {
        "id": "r2MyEgjX4osy"
      },
      "execution_count": 61,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def print_nodes(nodes):\n",
        "  for node in nodes:\n",
        "    print(node)\n",
        "    print(\"\\n\")"
      ],
      "metadata": {
        "id": "drSnZh9V-3cI"
      },
      "execution_count": 52,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "node_reader = SimpleDirectoryReader(input_files=[\"sample_data/sample-long.txt\"])\n",
        "documents = node_reader.load_data()\n",
        "parser = SimpleFileNodeParser(\n",
        "    chunk_size=50\n",
        ")\n",
        "nodes = parser.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WFdT0R-v4v1Y",
        "outputId": "cf5dc63d-5ca9-4f88-c456-88faa6fe00f6"
      },
      "execution_count": 56,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Node ID: 977f5bab-0431-494d-a414-f4318c95537f\n",
            "Text: SimpleFileNodeParser 是 LlamaIndex 框架中用于解析和处理文件数据的一个类。它的设计目标是读取简单\n",
            "的文件结构，将其转化为可以被大语言模型处理的节点格式，使得模型能够基于这些节点数据进行信息检索、问答等任务。    主要功能\n",
            "文件解析：SimpleFileNodeParser\n",
            "用于从文件系统中读取文件内容。它可以处理不同类型的文件（如文本文件、Markdown、JSON 等），并将这些文件内容解析为\n",
            "LlamaIndex 能够理解的节点数据结构。    节点化数据：在 LlamaIndex\n",
            "中，数据通常被组织成节点（nodes），每个节点代表文档的一个小部分。SimpleFileNodeParser\n",
            "能够将大文件分割成多个节点，方便后续索引、搜索和检索操作...\n",
            "\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "documents = FlatReader().load_data(Path(\"sample_data/sample.txt\"))\n",
        "parser = SimpleFileNodeParser()\n",
        "nodes = parser.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "id": "3CCVVNbOTZna",
        "outputId": "03fdb84b-81fe-45e6-b82a-d34a18823911",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 65,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Node ID: 32058712-cd06-430a-a689-dd40a1a301a5\n",
            "Text: LlamaIndex（原名 GPT Index）是一个数据框架，旨在简化与大语言模型（如 OpenAI 的 GPT 系列）集成、\n",
            "组织和操作本地数据的过程。它提供了一套工具和接口，用于将结构化和非结构化数据（如文档、数据库、网页、API数据等）整合到大语言模型的工作流中\n",
            "，使模型能够更有效地理解和利用这些信息进行问答、生成和推理。  核心功能包括： 数据索引：LlamaIndex\n",
            "提供了多种方式创建不同类型的数据索引（如向量索引、树形索引等），让大模型可以快速检索相关数据。\n",
            "文档解析与分割：支持将长文档或多文档数据分割成可管理的小段落，并通过灵活的解析方式帮助语言模型理解大规模文本。\n",
            "与大语言模型的无缝集成：LlamaIndex 提供简单的 API，与 OpenAI 的 GPT 模型以...\n",
            "\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "node_reader = SimpleDirectoryReader(input_files=[\"sample_data/sample.html\"])\n",
        "documents = node_reader.load_data()\n",
        "parser = HTMLNodeParser()\n",
        "nodes = parser.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LT6zEHZN9_zu",
        "outputId": "8b45be6a-bbbc-47ad-b7d1-0bc971b11afb"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Node ID: d2a304ca-7cd1-486c-bf79-8d0ad0f3caf2\n",
            "Text: 预约试驾 了解极越07 NEW ERAOF ROBOCAR INTELLIGENCEIN DESIGN\n",
            "*本页面所示极越07车型配置仅供参考，具体以实物车辆为准。 立即定购 了解极越01 NEW ERAOF ROBOCAR\n",
            "INTELLIGENCEIN DESIGN   *本页面所示极越01车型配置及功能仅供参考，部分非全系标配，请以实际交付为准。 预约试驾\n",
            "了解极越07 NEW ERAOF ROBOCAR INTELLIGENCEIN DESIGN\n",
            "*本页面所示极越07车型配置仅供参考，具体以实物车辆为准。 立即定购 了解极越01 NEW ERAOF ROBOCAR\n",
            "INTELLIGENCEIN DESIGN   *本页面所示极越01车型配置及功能仅供参考，部分非全系标配，请...\n",
            "Node ID: 5cca4dda-1200-4d61-88cf-980d5e301f2e\n",
            "Text: 硬实力才敢「真」智驾。\n",
            "Node ID: 0e938cee-d749-43b4-a7a7-d81e8a741e83\n",
            "Text: 懂你的才是「好」智舱。            AI大模型全面接入，全场景融合，全感官互动。自然交流，聪明懂你。\n",
            "了解更多详情 AI COCKPIT 智能座舱 * 所示为极越01车型配置、功能及界面，仅供参考 INSTANTLY UNDERSTOOD\n",
            "UPON SPEAKING 大模型接入 一说就懂③ SIMO 语音    EVERYTHING IN ONE GLANCE 全场景融合\n",
            "一目了然 3D 智驾地图    ULTRA-IMMERSIVE EXPERIENCE 全感官互动 一应俱全 全沉浸休闲舱\n",
            "全方位体验极越。 以用户体验为出发原点，为用户带来品质感体验，在个性突破的门店空间中打造有温度感的智能先锋⻔店。 查看全部门店\n",
            "NATIONAL STORE 全国...\n",
            "Node ID: 4442bce4-7b5b-4a12-b71d-a26319e9d9f9\n",
            "Text: 全方位体验极越。\n",
            "Node ID: dca25aa6-f992-4246-816f-30955f036c4c\n",
            "Text: 以用户体验为出发原点，为用户带来品质感体验，在个性突破的门店空间中打造有温度感的智能先锋⻔店。\n",
            "Node ID: bb889b3a-c35f-4423-802b-b83362dd5bd7\n",
            "Text: 专业高效保障你的移动服务。        围绕用户体验多维服务场景，构建科学完善的服务体系，为用户提供全方位的服务支持。\n",
            "ROBO SERVICE 极智服务 ENERGY 极越能源为智能生活续航     FINANCING 超低年费率金融服务 TRADE-IN\n",
            "安全便捷一站式官方置换     SERVICE 售后服务真诚专业 7*24h\n",
            "Node ID: eb3f8c7c-b710-488b-90f3-d32d30066c02\n",
            "Text: 专业高效保障你的移动服务。\n",
            "Node ID: 960dd30a-2f46-48c2-8fe7-55d2ed2a2f05\n",
            "Text: 围绕用户体验多维服务场景，构建科学完善的服务体系，为用户提供全方位的服务支持。\n",
            "Node ID: 39d02bf3-3294-43f1-9b8b-86dd9c1b7a7d\n",
            "Text: 全球顶级设计大奖三冠王， 极越智美双全。\n",
            "Node ID: ce25ced9-12f4-4c0a-9269-1af5486973cd\n",
            "Text: 斩获德国红点、iF、日本GOOD DESIGN三项设计大奖 ④ ，机器人美学为移动生活带来智慧之美。\n",
            "Node ID: cd8584eb-0603-479c-8807-3f86f6c3aed4\n",
            "Text: ① 智能辅助驾驶功能的启用与升级，将受限于届时功能开放的城市及法律法规要求。功能无法替代驾驶员，无法应对所有交通、天气、路况及所\n",
            "有交通参与者，请勿过度依赖。驾驶员有责任时刻保持警惕，随时准备迅速接管掌控车辆，以确保安全驾驶。②\n",
            "预计2024年底在全国实现，具体时间以官方另行公布为准。③ 车内部分软硬件功能可通过 SIMO 语音调用。④\n",
            "极越01及其概念车荣获2023德国红点奖、2023iF设计大奖、2022GOOD DESIGN设计大奖。法律声明极越致力于不断改进和完善产品\n",
            "，车辆的配置和参数可能会有相应变化。我们会尽一切可能，确保信息的完整性和准确性；但因客观原因，例如供应链调整、法律法规变化、监管部门要求、不\n",
            "同人士对相关信息理解的不同、信息存在更新不及时等情况，实物车辆可能会与介绍信...\n",
            "Node ID: 6f99e87c-926f-4365-8cfc-d063fefd8f27\n",
            "Text: © 2024 上海集度汽车有限公司 沪 ICP 备 2022004720 号-5 沪公网安备 31011402010262号\n",
            "营业执照 隐私&法律 维修技术信息\n",
            "Node ID: a737598e-da36-41ad-8f78-10e17cae4701\n",
            "Text:\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "parser = HTMLNodeParser(tags=[\"a\"])\n",
        "nodes = parser.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KeoYayIy_nU_",
        "outputId": "7c2b4c11-2eb7-4d71-dbb2-729a5263ac38"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Node ID: 7a04f1e3-0348-4b61-b048-7b2b1a8c9929\n",
            "Text: 极越07 极越01 极越品牌 极越世界 关于我们 注册/登录 预约试驾  预约试驾 ROBOCAR 07 极越07\n",
            "ROBOCAR 01 极越01 BRAND 极越品牌 ROBO WORLD 极越世界 ABOUT US 关于我们 LOG IN 注册/登录\n",
            "预约试驾  预约试驾 了解极越07 立即定购 了解极越01\n",
            "我们致力于打造智能化领先的汽车机器人，以高阶智驾、智舱产品和创新数字化服务，为用户创造标杆级智能科技出行体验。 了解我们 了解更多详情\n",
            "了解更多详情 查看全部门店 ENERGY 极越能源为智能生活续航 FINANCING 超低年费率金融服务  沪 ICP 备\n",
            "2022004720 号-5 沪公网安备 31011402010262号 营业执照 隐私&法律 维修技术信息\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "node_reader = SimpleDirectoryReader(input_files=[\"sample_data/sample.json\"])\n",
        "documents = node_reader.load_data()\n",
        "parser = JSONNodeParser()\n",
        "nodes = parser.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "id": "J9Cc8glAHODN",
        "outputId": "5dc59b23-cff9-4f18-f79b-eebb8f1602a3",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Node ID: 1ff7e9e3-6d1c-4acc-af12-e7cc8fe64362\n",
            "Text: name Alice age 25 email alice@example.com isStudent False\n",
            "courses courseName Mathematics courses grade A courses courseName\n",
            "History courses grade B\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "node_reader = SimpleDirectoryReader(input_files=[\"sample_data/sample.js\"])\n",
        "documents = node_reader.load_data()\n",
        "splitter = CodeSplitter(\n",
        "    language=\"javascript\",\n",
        "    chunk_lines=5,\n",
        "    chunk_lines_overlap=2,\n",
        "    max_chars=1500,\n",
        ")\n",
        "nodes = splitter.get_nodes_from_documents(documents)"
      ],
      "metadata": {
        "id": "qENSaBl1Iicm",
        "outputId": "d9e4ade3-10ea-4105-fe76-7fe67d4b44db",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 436
        }
      },
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Could not get parser for language javascript. Check https://github.com/grantjenks/py-tree-sitter-languages#license for a list of valid languages.\n"
          ]
        },
        {
          "output_type": "error",
          "ename": "TypeError",
          "evalue": "__init__() takes exactly 1 argument (2 given)",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
            "\u001b[0;32m<ipython-input-40-d79bbbbad6b5>\u001b[0m in \u001b[0;36m<cell line: 3>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mnode_reader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSimpleDirectoryReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_files\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"sample_data/sample.js\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mdocuments\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnode_reader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m splitter = CodeSplitter(\n\u001b[0m\u001b[1;32m      4\u001b[0m     \u001b[0mlanguage\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"javascript\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m     \u001b[0mchunk_lines\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/llama_index/core/node_parser/text/code.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, language, chunk_lines, chunk_lines_overlap, max_chars, parser, callback_manager, include_metadata, include_prev_next_rel, id_func)\u001b[0m\n\u001b[1;32m     75\u001b[0m                 \u001b[0;32mimport\u001b[0m \u001b[0mtree_sitter_languages\u001b[0m  \u001b[0;31m# pants: no-infer-dep\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     76\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 77\u001b[0;31m                 \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtree_sitter_languages\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_parser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlanguage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     78\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mImportError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     79\u001b[0m                 raise ImportError(\n",
            "\u001b[0;32mtree_sitter_languages/core.pyx\u001b[0m in \u001b[0;36mtree_sitter_languages.core.get_parser\u001b[0;34m()\u001b[0m\n",
            "\u001b[0;32mtree_sitter_languages/core.pyx\u001b[0m in \u001b[0;36mtree_sitter_languages.core.get_language\u001b[0;34m()\u001b[0m\n",
            "\u001b[0;31mTypeError\u001b[0m: __init__() takes exactly 1 argument (2 given)"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "node_reader = SimpleDirectoryReader(input_files=[\"sample_data/sample.txt\"])\n",
        "documents = node_reader.load_data()\n",
        "splitter = SentenceSplitter(\n",
        "    chunk_size=100,\n",
        "    chunk_overlap=20,\n",
        ")\n",
        "\n",
        "nodes = splitter.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "id": "2_qz08LoH8hk",
        "outputId": "365a199d-6eb0-40a8-8453-9633ee2e609e",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Node ID: 4ac8112f-6402-4352-8ecb-9ef745014cf5\n",
            "Text: LlamaIndex（原名 GPT Index）是一个数据框架，旨在简化与大语言模型（如 OpenAI 的 GPT\n",
            "系列）集成、组织和操作本地数据的过程。\n",
            "Node ID: 4f02fc8e-60a2-4a35-93ca-da98e73c3e85\n",
            "Text: 它提供了一套工具和接口，用于将结构化和非结构化数据（如文档、数据库、网页、API数据等）整合到大语言模型的工作流中，使模型能够更\n",
            "有效地理解和利用这些信息进行问答、生成和推理。\n",
            "Node ID: 21a04674-5de1-4436-8bb7-2290965fc12b\n",
            "Text: 核心功能包括：  数据索引：LlamaIndex\n",
            "提供了多种方式创建不同类型的数据索引（如向量索引、树形索引等），让大模型可以快速检索相关数据。\n",
            "Node ID: 928bc16a-1ed7-45d6-85af-70f276a42ed1\n",
            "Text: 文档解析与分割：支持将长文档或多文档数据分割成可管理的小段落，并通过灵活的解析方式帮助语言模型理解大规模文本。\n",
            "Node ID: 6a2f47f6-5827-4125-9fe8-b226f99e3025\n",
            "Text: 与大语言模型的无缝集成：LlamaIndex 提供简单的 API，与 OpenAI 的 GPT\n",
            "模型以及其他类似模型直接交互，让开发者可以方便地集成自定义数据并与其交互。\n",
            "Node ID: 96df4acb-2f9b-4e5e-8aba-00d58056d96a\n",
            "Text: 多模态数据支持：框架不仅支持文本，还支持多种数据来源，如网页、数据库、表格等，使大语言模型能够处理更加广泛的上下文信息。\n",
            "Node ID: 33fc8d52-3571-41ad-bcd0-bd667672545e\n",
            "Text: 可扩展性与定制：LlamaIndex 允许开发者根据具体需求定制索引结构和数据处理流程，增强了模型的灵活性与适应性。\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "splitter = SentenceSplitter(\n",
        "    chunk_size=50,\n",
        "    chunk_overlap=10,\n",
        ")\n",
        "\n",
        "nodes = splitter.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "id": "4foTc3zgM3gG",
        "outputId": "b486735c-3e50-45c2-b394-4a3d9c06821a",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 34,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Metadata length (7) is close to chunk size (50). Resulting chunks are less than 50 tokens. Consider increasing the chunk size or decreasing the size of your metadata to avoid this.\n",
            "Node ID: 293cd9f4-fb89-435e-8f5f-3985b3730036\n",
            "Text: LlamaIndex（原名 GPT Index）是一个数据框架，旨在简化与大语言模型（如 OpenAI 的 GPT\n",
            "Node ID: a446a84d-4266-4f13-90fc-da1ce0aa1305\n",
            "Text: OpenAI 的 GPT 系列）集成、组织和操作本地数据的过程。它提供了一套工具和接口，用于将结构\n",
            "Node ID: 1ef1d9d4-7b6c-4ec7-ada5-95256dd968d8\n",
            "Text: 具和接口，用于将结构化和非结构化数据（如文档、数据库、网页、API数据等）整合到大语\n",
            "Node ID: cbce9d18-1cd3-4d60-b87f-c647c3dc6aa9\n",
            "Text: I数据等）整合到大语言模型的工作流中，使模型能够更有效地理解和利用这些信息进行问答\n",
            "Node ID: a1144cbc-3cb6-4939-98dc-e89175521c40\n",
            "Text: 用这些信息进行问答、生成和推理。    核心功能包括：  数据索引：LlamaIndex\n",
            "Node ID: b8ceb9bf-6575-44f0-b030-eb79c738dc57\n",
            "Text: 提供了多种方式创建不同类型的数据索引（如向量索引、树形索引等），让大模型可以快速检索相关数据。\n",
            "Node ID: 2a8d39a8-2da9-45a4-9a50-a571b159f6cf\n",
            "Text: 文档解析与分割：支持将长文档或多文档数据分割成可管理的小段落，并通\n",
            "Node ID: fe1938d8-4417-4eac-8061-583a0ac58819\n",
            "Text: 管理的小段落，并通过灵活的解析方式帮助语言模型理解大规模文本。\n",
            "Node ID: 8a07dd49-8de9-47fe-bc46-f74c62a90727\n",
            "Text: 模型理解大规模文本。    与大语言模型的无缝集成：LlamaIndex 提供简单的 API，与 OpenAI 的 GPT\n",
            "Node ID: 28154d0a-00cb-4545-82fd-d8d024069e2f\n",
            "Text: API，与 OpenAI 的 GPT 模型以及其他类似模型直接交互，让开发者可以方便地集成自定义数据并与其交互。\n",
            "Node ID: 48930960-ac8a-4003-92ee-0b6afc055706\n",
            "Text: 多模态数据支持：框架不仅支持文本，还支持多种数据来源，如网页、数据库、表\n",
            "Node ID: bf10bf03-8ba4-4315-9366-648a60e087ff\n",
            "Text: ，如网页、数据库、表格等，使大语言模型能够处理更加广泛的上下文信息。\n",
            "Node ID: 3bc13c96-a5f5-46ad-a896-490310b8b089\n",
            "Text: 广泛的上下文信息。    可扩展性与定制：LlamaIndex\n",
            "Node ID: fc96d908-ae63-46c3-8e53-280738b88eff\n",
            "Text: 允许开发者根据具体需求定制索引结构和数据处理流程，增强了模型的灵活性与适应性。\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "node_parser = SentenceWindowNodeParser.from_defaults(\n",
        "    # how many sentences on either side to capture\n",
        "    window_size=3,\n",
        "    # the metadata key that holds the window of surrounding sentences\n",
        "    window_metadata_key=\"window\",\n",
        "    # the metadata key that holds the original sentence\n",
        "    original_text_metadata_key=\"original_sentence\",\n",
        ")\n",
        "nodes = splitter.get_nodes_from_documents(documents)\n",
        "\n",
        "print_nodes(nodes)"
      ],
      "metadata": {
        "id": "4NT1iM_MNVpY",
        "outputId": "75dc62b3-0f44-4f90-c8de-f9b00a32f4fd",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Metadata length (7) is close to chunk size (50). Resulting chunks are less than 50 tokens. Consider increasing the chunk size or decreasing the size of your metadata to avoid this.\n",
            "Node ID: 4a3b6fec-ede6-4c01-a104-17642e836b32\n",
            "Text: LlamaIndex（原名 GPT Index）是一个数据框架，旨在简化与大语言模型（如 OpenAI 的 GPT\n",
            "Node ID: 5fc37e69-3db8-4611-9696-9a60b940fab2\n",
            "Text: OpenAI 的 GPT 系列）集成、组织和操作本地数据的过程。它提供了一套工具和接口，用于将结构\n",
            "Node ID: 6e4d1748-6b02-44e9-9ef7-69d01d777f00\n",
            "Text: 具和接口，用于将结构化和非结构化数据（如文档、数据库、网页、API数据等）整合到大语\n",
            "Node ID: 8e1c3b86-cc23-411b-be89-bc5c318c64e8\n",
            "Text: I数据等）整合到大语言模型的工作流中，使模型能够更有效地理解和利用这些信息进行问答\n",
            "Node ID: f8406af5-0f02-41be-a8f3-71036ffb46d6\n",
            "Text: 用这些信息进行问答、生成和推理。    核心功能包括：  数据索引：LlamaIndex\n",
            "Node ID: 49b72063-2b1a-4c56-8177-858bfb052824\n",
            "Text: 提供了多种方式创建不同类型的数据索引（如向量索引、树形索引等），让大模型可以快速检索相关数据。\n",
            "Node ID: 3f390149-1a32-4d93-a78a-34285b1d81d6\n",
            "Text: 文档解析与分割：支持将长文档或多文档数据分割成可管理的小段落，并通\n",
            "Node ID: d46fc0d8-855b-4783-9cf7-5377c5af927a\n",
            "Text: 管理的小段落，并通过灵活的解析方式帮助语言模型理解大规模文本。\n",
            "Node ID: f9e4b122-1769-48dc-8be6-a4c33ef98b3b\n",
            "Text: 模型理解大规模文本。    与大语言模型的无缝集成：LlamaIndex 提供简单的 API，与 OpenAI 的 GPT\n",
            "Node ID: 31f48725-3778-4c8f-b590-2e40163f32ad\n",
            "Text: API，与 OpenAI 的 GPT 模型以及其他类似模型直接交互，让开发者可以方便地集成自定义数据并与其交互。\n",
            "Node ID: 8d47716e-f93f-4bbc-9666-05e0f439edc5\n",
            "Text: 多模态数据支持：框架不仅支持文本，还支持多种数据来源，如网页、数据库、表\n",
            "Node ID: 33c1f0f6-d231-4728-868e-f0d6a3044328\n",
            "Text: ，如网页、数据库、表格等，使大语言模型能够处理更加广泛的上下文信息。\n",
            "Node ID: b9a910c3-c512-462c-b412-033857fcb536\n",
            "Text: 广泛的上下文信息。    可扩展性与定制：LlamaIndex\n",
            "Node ID: 151b5d30-73f8-4cc5-9dd8-eeda824f261b\n",
            "Text: 允许开发者根据具体需求定制索引结构和数据处理流程，增强了模型的灵活性与适应性。\n"
          ]
        }
      ]
    }
  ]
}